perm filename TABLE[CRE,BGB] blob sn#043264 filedate 1973-05-19 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00012 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	ALTERNATE PDP-10 MNEMONICS.
C00005 00003	TITLE TABLE  -  TABLE TEST
C00007 00004	TABLE COMMAND LISTEN LOOP.
C00009 00005	READ TURN TABLE POSITION SUBROUTINE.
C00010 00006	PDP-6 SPACE WAR JOB.
C00013 00007	PDP-10 SWACE WAR JOB. DISPLAY TABLE STATUS.
C00015 00008	SERVO DIAGONOSTICS DISPLAY.
C00017 00009	III DISPLAY SUBROUTINES.
C00018 00010	III DPY CONTINUED.
C00020 00011	III DPY CONTINUED.
C00022 00012	III DISPLAY ROUTINES.
C00024 ENDMK
C⊗;
;ALTERNATE PDP-10 MNEMONICS.

	DEFINE O(A,B){OPDEF A[B]}
	O LIP,HLR↔O LAP,HRR↔O DIP,HRLM↔O DAP,HRRM
	O ZIP,HRRZS↔O ZAP,HLLZS↔O WIP,HRROS↔O WAP,HRRZS
	O CAR,HLRZ↔O LIPI,HRLI↔O LAPI,HRRI↔O DIPZ,HRLZM
	O CDR,HRRZ↔O LACI,MOVEI↔O SLACI,MOVSI↔O DAPZ,HRRZM
	O LAC,MOVE↔O LACN,MOVN↔O LACM,MOVM↔O SLAC,MOVS
	O DAC,MOVEM↔O DACN,MOVNM↔O DACM,MOVMM↔O SDAC,MOVSM
	O NIP,HLRE↔O NAP,HRRE↔O NIM,HRREI↔O GO,JRST
	O FLOAT,FSC 233↔O FLO,FSC 225↔O FIXX,FIX 233000
	O DZM,SETZM

;SAIL LIKE SUBROUTINE LINKAGE.

	↓P←←17
	DEFINE SUBR(NAME){INTERN NAME↔↓NAME: ;}
	DEFINE CALL(NAME,X1,X2,X3,X4){
	IFDIF <> <X1> {PUSH 17,X1↔IFDIF <> <X2> {PUSH 17,X2
	IFDIF <> <X3> {PUSH 17,X3↔IFDIF <> <X4> {PUSH 17,X4}}}}
	PUSHJ 17,NAME}
	DEFINE ARG1<-1(17)>↔DEFINE ARG2<-2(17)>
	DEFINE ARG3<-3(17)>↔DEFINE ARG4<-4(17)>
	DEFINE SETQ(VAR,LIST){CALL(LIST)↔DAC 1,VAR}

;RETURN FROM AN N-ARGUMENT SUBROUTINE CALL.

	DEFINE POP0J <POPJ 17,>
	↓POP1J.:SUB 17,[2(2)]↔GO@2(17)↔DEFINE POP1J<GO POP1J.>
	↓POP2J.:SUB 17,[3(3)]↔GO@3(17)↔DEFINE POP2J<GO POP2J.>
	↓POP3J.:SUB 17,[4(4)]↔GO@4(17)↔DEFINE POP3J<GO POP3J.>
	↓POP4J.:SUB 17,[5(5)]↔GO@5(17)↔DEFINE POP4J<GO POP4J.>

;ACCUMULATOR AND TEMPORARY DATA MANAGEMENT.

	DEFINE ACCUMULATORS(LIST){ACPTR←←2
	FOR AC⊂(LIST)<AC←ACPTR↔ACPTR←←ACPTR+1↔>}
	DEFINE DECLARE (LIST){
	FOR VARNAM⊂(LIST)<VARNAM: 0↔>}

;FATAL ERROR MESSAGE.

	DEFINE FATAL(STR){PUSHJ 17,FATAL.↔ASCIZ/STR/}
	FATAL.:OUTSTR[BYTE(7)15,12,106,101,124↔"AL - "⊗1↔0]
	OUTSTR @(17)↔INCHRW↔GO .-1↔LIT
	DEFINE CRLF{OUTSTR[BYTE(7)15,12]}
	%←1B18
TITLE TABLE  -  TABLE TEST

COMMENT⊗
Run Turn table:
	DATAO 500,[speed(5)]
	Speed 0 TO 77 turn counter clockwise.
	Speed 100 to 176 turn clockwise.
	speed 177 stop and lock.
	Speed 200 table time out.
Read Turn Table:
	DATAI 410,X	;Read Turn Table. 1b18 count invalid bit.
	CONO  410,0	;Reset table count to zero.
			;10 arcs of 2000 counts.
⊗
PDL:	BLOCK 30
;INITIALIZATION.
SA:	LAC P,[IOWD 20,PDL]
	DZM INVCNT
REE:	LACI .↔DAC 124
	PPIOT 2,-=250↔PPIOT 3,3003
;DISPLAY BOX AND TITLE.
	CALL(DPYSET,DPYBUF)
	CALL(AIVECT,[=500],[=400])
	CALL(AVECT,[=000],[=400])
	CALL(AVECT,[=000],[=000])
	CALL(AVECT,[=500],[=000])
	CALL(AVECT,[=500],[=400])
	CALL(DPYBIG,[3])
	CALL(AIVECT,[=10],[=360])
	CALL(DPYSTR,{[[ASCIZ/TURN TABLE SERVO TEST/]]})
	CALL(DPYOUT,[0])
;TABLE COMMAND LISTEN LOOP.
LOOP:	CALL(XTABLE)		;TELETYPE COMMAND.
	CALL(INIT6)		;INITIALIZE SERVO DIAGONOSTICS.
	LOCK
	SPCWAR 1,PDP6		;FIRE UP PDP-6.
	LAC[XWD %+10,PDP10]
	SPCWGO			;FIRE UP PDP-10
	LACI 2↔SLEEP
	SKIPL TICKS↔JRST .-3	;WAIT FOR TIME OUT.
	SPCWAR'SSW'		;STOP SPACE JOB.
	UNLOCK
	JRST LOOP

;TELETYPE COMMAND SCANNER.----------------------------------------
XTABLE:	
	INCHRW
	SETZM CTRL↔TRZE 200↔SETOM CTRL#
	SETZM META↔TRZE 400↔SETOM META#
	DAC CHR#
;XTABLE:
	CAIN" "↔GO .+3
	MOVEI 5*=60↔MOVEM TICKS#		;5 SECONDS.
	MOVEI 20↔DAP SPEED			;SPEED 20.
	LAC CTRL↔DAC TTDIR	;TURN TABLE DIRECTION.
	POP0J
;-----------------------------------------------------------------
;READ TURN TABLE POSITION SUBROUTINE.
TTREAD:	0
	DATAI 410,XXXX			;READ THE TABLE POSITION.
	LAC 2,[POINT 4,XXXX,15]
	ILDB 0,2			;TEN THOUSAND.
	ILDB 1,2↔IMULI 0,=10↔ADD 0,1	;THOUSANDS.
	ILDB 1,2↔IMULI 0,=10↔ADD 0,1	;HUNDREDS.
	ILDB 1,2↔IMULI 0,=10↔ADD 0,1	;TENS.
	ILDB 1,2↔IMULI 0,=10↔ADD 0,1	;ONES.
	EXCH 0,ZZZZ
	SUB 0,ZZZZ↔DACM 0,DELX
	GO@TTREAD
;PDP-6 SPACE WAR JOB.
;_________________________________________________________________
PDP6:	CONSZ 40↔DISMIS			;ARE WE REALLY ON THE PDP-6.
	JSR TTREAD
	SOSG TICKS↔ZAP YYYY		;TIME OUT TO NO OPERATION.
	SKIPGE TICKS↔GO TTRUN2
	SKIPG 3↔ADDM 3,LOST		;LOST TICKS.
	LAC 1,DELX
	CAILE 1,=10000↔GO TTRUN 	;IGNORE THE RIDICULOUS.
	CAMLE 1,MAXDEL↔DAC 1,MAXDEL	;BIGGER THAN EVER BEFORE.
	CAMGE 1,MINDEL↔DAC 1,MINDEL	;SMALLER THAN EVER BEFORE.
	ADDM 1,SUMDEL↔AOS DELCNT#
TTRUN:	LAC SPEED↔SKIPE TTDIR↔LACN
	ANDI 177↔LIPI 5↔DAC YYYY
TTRUN2:	DATAO 500,YYYY			;SEND TABLE SPEED COMMAND.
	DISMIS
;_________________________________________________________________
INIT6:	DZM LOST↔DZM MAXDEL↔DZM INVCNT↔SETZM FLG#↔DZM CNT2#
	DZM SUMDEL#↔DZM DELCNT#
	LACI -1↔DAC MINDEL↔POP0J
;_________________________________________________________________
TTDIR:	0	;TURN TABLE DIRECTION.
SPEED:	0	;TURN TABLE SPEED.
xxxx:	0	;TURN TABLE SHAFT POSITION.
ZZZZ:	0
DELX:	0	;DELTA SHAFT POSITION.
MAXDEL:	0
MINDEL:	0
LOST:	0	;LOST TICKS.
YYYY:	20(5)
INVCNT:	0	;COUNT OF INVALID HITS.
;_________________________________________________________________
;PDP-10 SWACE WAR JOB. DISPLAY TABLE STATUS.

PDP10:	CONSO 40↔DISMIS		;ARE WE REALLY ON THE PDP-10.
	GO 3,@[.+1]		;LEAVE IOT USER MODE.
	LAC P,[IOWD 20,PDL10]	;SEPARATE PDL SPACE.
	CALL(DPYSET,DPYBUF)
;TIME.
	CALL(AIVECT,[=40],[=320])
	CALL(DPYBIG,[2])
	CALL(DPYSTR,{[[ASCIZ/TICK/]]})
	CALL(AIVECT,[=150],[=320])
	LAC 1,TICKS↔CALL(DECDPY)
;SHAFT.
	CALL(AIVECT,[=40],[=290])
	CALL(DPYSTR,{[[ASCIZ/SHAFT/]]})
	CALL(AIVECT,[=150],[=290])
	LAC 1,ZZZZ↔CALL(DECDPY)
	CALL(AIVECT,[=250],[=290])
	LAC 10,XXXX↔CALL(OD)
	CALL(AIVECT,[=350],[=290])
	LAC XXXX↔TRNE %↔GO[
	CALL(DPYSTR,{[[ASCIZ/INVALID./]]})↔GO .+3]
	CALL(DPYSTR,{[[ASCIZ/VALID./]]})
;SERVO DIAGONOSTICS DISPLAY.

;DELTA.
	CALL(AIVECT,[=40],[=260])
	CALL(DPYSTR,{[[ASCIZ/DELTA  /]]})
	CALL(AIVECT,[=200],[=260])
	LAC 1,MINDEL↔CALL(DECDPY)
	CALL(AIVECT,[=275],[=260])
	LAC 1,DELX  ↔CALL(DECDPY)
	CALL(AIVECT,[=350],[=260])
	LAC 1,MAXDEL↔CALL(DECDPY)
	CALL(AIVECT,[=425],[=260])
	LAC 1,SUMDEL↔IDIV 1,DELCNT↔CALL(DECDPY)
;INVALID COUNT.
	CALL(AIVECT,[=40],[=230])
	CALL(DPYSTR,{[[ASCIZ/INVALID HITS  /]]})
	LAC 1,INVCNT↔CALL(DECDPY)↔CALL(DTYO,[" "])
	LAC 1,CNT2↔CALL(DECDPY)↔CALL(DTYO,[" "])
	LAC 1,LOST↔CALL(DECDPY)

	CALL(DPYOUT,[1])
	DISMIS
PDL10:	BLOCK 30
;-----------------------------------------------------------------
;III DISPLAY SUBROUTINES.
	FLGIII:-1
	FLGDD:0
;DISPLAY UUO CODES.
	OPDEF DPYPOS [XWD 702100,0]
	OPDEF DPYSIZ [XWD 702140,0]
	OPDEF DPYCLR [XWD 701000,0]
	OPDEF UPG [XWD 703000,0]
	OPDEF GETLIN [TTYUUO 6,]

	A←1↔B←2↔C←3
DPYBUF:	DPYBU.	↔INTERN DPYBUF,DPYSET,DPYOUT
INTERN AIVECT,DTYO,RIVECT,DPYBRT,DPYBIG
	=2048↔1↔XWD 1,=2048
DPYBU.: BLOCK 4000

;SOURCE WINDOW.
	SX:	0
	SY:	0
	SOX:	0
	SOY:	0

;OBJECT WINDOW.
	OX:	0
	OY:	0
INTERN SX,SY,MAG,DEL
	MAG:	3.4
	DEL:	32.0

;PSEUDO BEAM POSITION.
	XXX:	0
	YYY:	0


	DECLARE{XL,XH,YL,YH}
IGNORE:	0
DPYPTR:	0
BUFEND:	0
BUFHD:	0
	0
;III DPY CONTINUED.
DPYBIG:	LAC 1,ARG1
	LACI 3,46	;ZERO LENGTH RELATIVE-INVISIBLE VECTOR
	DPB 1,[POINT 3,3,27]
	PUSH P,(P)	;COPY PC.
	GO LV2

DPYBRT:	LAC 1,ARG1
	LACI 3,46
	DPB 1,[POINT 3,3,24]
	PUSH P,(P)	;COPY PC.
	GO LV2

RIVECT: SKIPA C,[46]
RVECT:	LACI C,6
	GO LV0
AIVECT:	SKIPA C,[146]	;INVISIBLE ABSOLUTE.
AVECT:	LACI C,106
LV0:	SKIPGE IGNORE↔POP2J
LV:	LAC A,ARG2↔LAC B,ARG1
LVC:	DPB A,[POINT 11,C,10]
	DPB B,[POINT 11,C,21]
LV2:	AOS A,DPYPTR↔DAC C,(A)
LV3:	LIPI A,<(<POINT 7,0,35>)>
	DAC A,DPYPTR↔LACI A,(A)
	CAML A,BUFEND↔SETOM IGNORE
	POP2J
;--------------------------------------------------------------
;III DPY CONTINUED.
DPYSTR:	LAC 3,ARG1
	LIPI 3,440700
	ILDB 3↔JUMPE POP1J.
	CALL(DTYO,0)↔GO DPYSTR+2

DTYO:	LAC 1,ARG1
	IDPB A,DPYPTR
	CDR A,DPYPTR
	CAML A,BUFEND
	SETOM IGNORE
	POP1J

DPYCLR:	SKIPL DPYFLG#
	DPYCLR
	DZM BUFHD
	POPJ P,

DPYOUT:	
	SKIPN 1,BUFHD↔GO .+6
	LAC 2,DPYPTR↔DAC 2,-2(1)
	LACI 2,2(2)↔SUB 2,1↔DAC 2,-1(1)
	CDR B,DPYPTR
	SUB B,BUFHD
	ADDI B,1
	DAC B,BUFHD+1
	LAC 1,ARG1
	DPB A,[POINT 4,.+3,12]↔IOR A,DPYFLG↔SKIPL A↔UPG BUFHD
	POP1J

DPYSET:	DZM DPYFLG
	LAC 1,ARG1
	ADDI 1,2
	DAC 1,BUFHD
	CDR 2,-3(1)	;SIZE
	ADDI 2,-3(1)
	SUBI 2,1
	DZM IGNORE
	DAC 2,BUFEND
CLR2:	LAC A,BUFHD
	LACI B,1
	DAC B,1(A)
	LACI B,2(A)
	LIPI B,1(A)
	BLT B,@BUFEND	;SET DPY BUFFER TO NULL CHARACTER WORDS
	PUSH P,(P)	;COPY PC.
	GO LV3
;III DISPLAY ROUTINES.
SUBR(OD)----------------------------------------------------------
BEGIN OD;OCTAL HALF WORD DISPLAY - BGB - 13 DEC 1972.
	LACI 7,6↔DIPZ 10,10↔SETO
L:	ROT 10,3↔ADDI 10,60↔TRNE 10,17↔SETZ
	JUMPN 0,.+3↔CALL(DTYO,10)↔ZAP 10↔SOJG 7,L
	CALL(DTYO,[" "])↔POP0J
BEND;12/13/72-----------------------------------------------------
SUBR(DECDPY)NUM		;DECIMAL DISPLAY NUMBER.
BEGIN DECDPY;-----------------------------------------------------
L:	JUMPGE 1,.+5
	MOVM 2,1
	CALL(DTYO,["-"])
	LAC 1,2
	IDIVI 1,12
	PUSH P,2
	SKIPE 1
	PUSHJ P,L
	POP P,1↔ADDI 1,60
	CALL(DTYO,1)
	POP0J
BEND DECDPY;12/17/72----------------------------------------------
END SA